
% MATLAB script to calculate the detection error probability in covert communications

% 下面是基于上述隐蔽通信理论的 MATLAB 代码，该代码计算了检测错误概率 \(\xi\) 及其使用 Pinsker 不等式得到的界限。

% 
% ### 代码解释
% 
% 1. **定义参数**：
%    - `sigma_w`：噪声的标准差，设为1。
%    - `N`：天线的数量。
%    - `L_p`：路径数量。
%    - `rho_k_l`：信道增益，这里假设为一个已知常数，简化计算。
%    - `w_k`：波束形成向量，假设为归一化向量。
% 
% 2. **计算 \(\lambda_0\) 和 \(\lambda_1\)**：
%    - `lambda0`：仅包含噪声方差。
%    - `lambda1`：包含信号和噪声的综合方差，计算中考虑了信道增益和波束形成向量的影响。
% 
% 3. **定义 PDF 函数**：
%    - `p0` 和 `p1`：根据 \(\lambda_0\) 和 \(\lambda_1\) 分别计算的 PDF 函数。
% 
% 4. **计算 KL 散度**：
%    - `D_p0_p1` 和 `D_p1_p0`：分别计算从 \(p_0\) 到 \(p_1\) 和从 \(p_1\) 到 \(p_0\) 的 KL 散度。
% 
% 5. **使用 Pinsker 不等式计算总变差界**：
%    - `V_T_bound_p0_p1` 和 `V_T_bound_p1_p0`：使用 KL 散度计算的总变差界。
% 
% 6. **计算检测错误概率 \(\xi\) 的下界**：
%    - `epsilon`：预先指定的隐蔽通信约束。
%    - `xi_lower_bound`：检测错误概率 \(\xi\) 的下界。
% 
% 7. **输出结果**：
%    - 打印 KL 散度和总变差界。
%    - 打印检测错误概率 \(\xi\) 的下界。
%    - 判断是否满足隐蔽通信约束。
% 
% 通过运行这段代码，可以得到检测错误概率 \(\xi\) 的下界，并验证是否满足给定的隐蔽通信约束。


% 定义参数
sigma_w = 1; % 噪声方差
N = 64; % 天线数量
L_p = 4; % 路径数量
rho_k_l = 1; % 信道增益（为了简化假设其为已知常数）

% 定义波束形成向量 w_k (假设一个简单的情景)
w_k = ones(N, 1) / sqrt(N); % 归一化的波束形成向量

% 计算 lambda0 和 lambda1
lambda0 = sigma_w^2;
sum_rho = sum(rho_k_l * (w_k' * w_k));
lambda1 = abs(sqrt(N / L_p) * sum_rho)^2 + sigma_w^2;

% 定义 PDF 函数
p0 = @(y) (1 / (pi * lambda0)) * exp(-abs(y).^2 / lambda0);
p1 = @(y) (1 / (pi * lambda1)) * exp(-abs(y).^2 / lambda1);

% 计算 KL 散度 D(p0 || p1) 和 D(p1 || p0)
D_p0_p1 = log(lambda1 / lambda0) + (lambda0 / lambda1) - 1;
D_p1_p0 = log(lambda0 / lambda1) + (lambda1 / lambda0) - 1;

% 使用 Pinsker 不等式计算总变差界
V_T_bound_p0_p1 = sqrt(0.5 * D_p0_p1);
V_T_bound_p1_p0 = sqrt(0.5 * D_p1_p0);

% 计算检测错误概率 xi 的下界
epsilon = 0.1; % 预先指定的隐蔽通信约束
xi_lower_bound = 1 - max(V_T_bound_p0_p1, V_T_bound_p1_p0);

% 输出结果
fprintf('D(p0 || p1): %.4f\n', D_p0_p1);
fprintf('D(p1 || p0): %.4f\n', D_p1_p0);
fprintf('V_T_bound_p0_p1: %.4f\n', V_T_bound_p0_p1);
fprintf('V_T_bound_p1_p0: %.4f\n', V_T_bound_p1_p0);
fprintf('Detection error probability lower bound (xi): %.4f\n', xi_lower_bound);
fprintf('Covert communication constraint satisfied: %s\n', xi_lower_bound >= (1 - epsilon));

